home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Purity / Purity #48 (1995-06-25)(PackMAN)(DE)[WB].zip / Purity #48 (1995-06-25)(PackMAN)(DE)[WB].adf / Palette / Palette_OS3.p < prev    next >
Text File  |  1995-06-23  |  4KB  |  152 lines

  1. PROGRAM palettedemo1;
  2. { Dieses Programm zeigt, wie ein Gadtools-Palettengadget programmiert
  3.   vielleicht kann mir aber jemand erklären, wie man _vor_ OS3 an die 
  4.   aktuelle angeklickte Farbe kommt!}
  5.  
  6.   USES gadtools;
  7.  
  8.   VAR win   : p_window;
  9.       t     : Array[1..15] OF TagItem;
  10.       di    : p_drawinfo;
  11.       vi    : PTR;
  12.       msg   : p_intuimessage;
  13.       ng    : newgadget;
  14.       gads  : ARRAY[1..8] OF p_gadget;
  15.       glist : p_gadget;
  16.       pgad  : p_gadget;
  17.       aktgad: p_gadget;
  18.       ok    : BOOLEAN;
  19.       pscr  : p_screen;
  20.     success : BOOLEAN;
  21.           i : INTEGER;
  22.        ende : BOOLEAN;
  23.  farbanzahl : LONG;    { Anzahl der Farben }
  24.        hilf : STRING; 
  25.         num : INTEGER; { aktuelle Farbnummer }
  26.  
  27. FUNCTION OS(version:BYTE):BOOLEAN
  28. VAR lib:p_library;
  29.  BEGIN
  30.   lib:=intuitionbase;
  31.   os:=(lib^.lib_version>=version);   
  32.  END;
  33.  
  34. PROCEDURE farbanzahl_holen;
  35. TYPE p_long=^long;
  36.  VAR plong:p_long;
  37.  
  38.  BEGIN
  39.   { die Farbanzahl aus den Bitplanes berechnen. n Bitplanes = 2^n Farben}
  40.   farbanzahl:=1;
  41.   FOR i:=1 TO di^.dri_depth DO farbanzahl:=farbanzahl*2; 
  42.   hilf:='Planes: '+intstr(i)+' Farbanzahl: '+intstr(farbanzahl);
  43.   IF OS(39) THEN
  44.    BEGIN
  45.     t[1].ti_tag:=GTPA_Color;  { aktuelle Farbe abfragen }
  46.     t[2].ti_tag:=TAG_DONE;
  47.     i:=GT_GetGadgetAttrsA(gads[1],win,NIL,^t);
  48.     plong:=p_long(t[1].ti_data); { ti_data ist immer eine Adresse einer Langwort- }
  49.     num:=plong^;                 { variable deswegen wandeln }
  50.     hilf:=hilf+' Aktuelle Farbnummer: '+intstr(num);
  51.    END;   
  52.   setwindowtitles(win,hilf,PTR(-1));  
  53.  END;
  54.  
  55. PROCEDURE tastendruck;
  56. TYPE p_long=^long;
  57.  VAR plong:p_long; { zum wandeln von ti_data }
  58.  
  59.  BEGIN
  60.   IF OS(39) THEN
  61.   BEGIN
  62.    farbanzahl:=1;
  63.    FOR i:=1 TO di^.dri_depth DO farbanzahl:=farbanzahl*2; {farbanzahl berechnen}
  64.  
  65.    t[1].ti_tag:=GTPA_Color;  
  66.    t[2].ti_tag:=TAG_DONE;
  67.    i:=GT_GetGadgetAttrsA(gads[1],win,NIL,^t);
  68.    plong:=p_long(t[1].ti_data);
  69.    num:=plong^;
  70.    IF num<farbanzahl-1 THEN inc(num) ELSE num:=0;
  71.    t[1]:=tagItem(GT_underscore,ORD('_'));
  72.    t[2]:=TagItem(GTPA_depth,di^.dri_depth); 
  73.    t[3]:=TagItem(GTPA_Indicatorheight,30);  
  74.    t[4]:=TagItem(GTPA_Indicatorwidth,30);   
  75.    t[5]:=TagItem(GTPA_Color,num);             
  76.    t[6].ti_tag:=Tag_Done;  
  77.    GT_SetGadgetAttrsA(gads[1],win,NIL,^t);
  78.   END;
  79.   farbanzahl_holen;
  80.  END;
  81.  
  82.  PROCEDURE oberflaeche;
  83.   BEGIN
  84.    t[1]:=tagItem(GT_underscore,ORD('_'));
  85.    t[2]:=TagItem(GTPA_depth,di^.dri_depth);  { Anzahl der Bitplanes }
  86.    t[3]:=TagItem(GTPA_Indicatorheight,30);   { Höhe+Breite des Indicatorfeldes,}
  87.    t[4]:=TagItem(GTPA_Indicatorwidth,30);    { welches die Farbe anzeigt. Ab OS3.0 egal}
  88.    t[5]:=TagItem(GTPA_Color,0);              { Aktuelle Farbe }
  89.    t[6].ti_tag:=Tag_Done;
  90.    ng:=newgadget(100,35,200,150,'_Palette',NIL,1,Placetext_left,vi,NIL);
  91.    gads[1]:=CreateGadgetA(PALETTE_KIND,pgad,^ng,^t);
  92.  
  93.   t[1]:=TagItem(WA_InnerWidth,400);
  94.   t[2]:=TagItem(WA_InnerHeight,180);
  95.   t[3].ti_Tag:=WA_Title;
  96.   t[3].ti_data:='PALETTE_KIND DEMO 15.06.1995 by RøgerSøft';
  97.   t[4]:=TagItem(WA_Idcmp,IDCMP_CLOSEWINDOW+IDCMP_GADGETUP+IDCMP_RAWKEY);
  98.   t[5]:=TagItem(WA_Flags,WFLG_CLOSEGADGET+WFLG_DRAGBAR+WFLG_ACTIVATE+
  99.                 WFLG_DEPTHGADGET+WFLG_SMART_REFRESH+WFLG_NOCAREREFRESH);
  100.   t[6]:=TagItem(WA_Left,75); 
  101.   t[7]:=TagItem(WA_Top,30);
  102.   t[8]:=TagItem(WA_Gadgets,LONG(glist));
  103.   t[9].ti_Tag:=TAG_DONE;
  104.   win:=OpenWindowTaglist(NIL,^t);
  105.   IF win=NIL THEN exit;
  106.   GT_Refreshwindow(Win,NIL);
  107.  END;  
  108.   
  109.  BEGIN
  110.   ende:=FALSE;
  111.   pscr:=lockpubScreen('Workbench');
  112.   di:=NIL;
  113.   di:=getscreendrawinfo(pscr);
  114.   IF (di=NIL) THEN exit;
  115.   freescreendrawinfo(pscr,di);
  116.   vi:=NIL;
  117.   vi:=GetVisualInfoA(pscr,NIL);
  118.   unLockPubScreen(NIL,pscr);
  119.   Glist:=NIL;
  120.   pgad:=CreateContext(^Glist);
  121.   IF (pgad=NIL) OR (vi=NIL) THEN exit;
  122.   oberflaeche;
  123.    
  124.   REPEAT   
  125.    msg:=Wait_Port(win^.UserPort);
  126.    msg:=GT_getImsg(win^.userport);
  127.     GT_ReplyImsg(msg);
  128.     CASE msg^.Class OF
  129.      IDCMP_GadgetUP:
  130.        BEGIN
  131.         aktgad:=msg^.iaddress;
  132.         CASE aktgad^.gadgetID OF
  133.         1:farbanzahl_holen;
  134.         ELSE END;
  135.        END;
  136.   
  137.       IDCMP_RAWKEY:
  138.        BEGIN
  139.         CASE msg^.code OF
  140.          25:tastendruck ; {code p}
  141.         ELSE END;
  142.        END;
  143.    
  144.      IDCMP_CLOSEWINDOW: ende:=TRUE;
  145.  
  146.      ELSE END; {OF CASE }
  147.   UNTIL ende;
  148.   Closewindow(win);
  149.   Freegadgets(glist);
  150.   Freevisualinfo(vi);  
  151.  END.
  152.